home *** CD-ROM | disk | FTP | other *** search
- ùúùúøº÷øº÷øº÷øº÷øº÷øº÷øº÷øº÷øº÷
- SECTION DemoTemplate,code
-
- INCDIR "xtc:coding/include/"
-
- INCLUDE "exec/exec_lib.i"
- INCLUDE "hardware/custom.i"
- INCLUDE "hardware/dmabits.i"
- INCLUDE "hardware/blit.i"
- INCLUDE "math/ffp.i"
-
- INCDIR "df0:"
-
- WidthofPlane EQU 640
- HeightofPlane EQU 200
- Modulo EQU WidthofPlane/8
- SizeOfPlane EQU Modulo*HeightofPlane
- Planes EQU 8
- CUSTOM EQU $DFF000
-
- move.l #Screen+(0*SizeOfPlane),d0
- move.w d0,Plane1Lo
- swap d0
- move.w d0,Plane1Hi
-
- move.l #Screen+(1*SizeOfPlane),d0
- move.w d0,Plane2Lo
- swap d0
- move.w d0,Plane2Hi
-
- move.l #Screen+(2*SizeOfPlane),d0
- move.w d0,Plane3Lo
- swap d0
- move.w d0,Plane3Hi
-
- move.l #Screen+(3*SizeOfPlane),d0
- move.w d0,Plane4Lo
- swap d0
- move.w d0,Plane4Hi
-
- move.l #Screen+(4*SizeOfPlane),d0
- move.w d0,Plane5Lo
- swap d0
- move.w d0,Plane5Hi
-
- move.l #Screen+(5*SizeOfPlane),d0
- move.w d0,Plane6Lo
- swap d0
- move.w d0,Plane6Hi
-
- move.l #Screen+(6*SizeOfPlane),d0
- move.w d0,Plane7Lo
- swap d0
- move.w d0,Plane7Hi
-
- move.l #Screen+(7*SizeOfPlane),d0
- move.w d0,Plane8Lo
- swap d0
- move.w d0,Plane8Hi
-
- lea (CUSTOM).l,a6
-
- CALLEXEC Forbid
-
- moveq #0,d0
- move.l #FFPNAME,a1
- CALLEXEC OpenLibrary
- move.l d0,_MathBase
-
- moveq #0,d0
- move.l #gfxlib,a1
- CALLEXEC OpenLibrary
- move.l d0,_GfxBase
- move.l d0,a0
- add.l #$32,a0
- move.w #$A0,$dff096
- move.l (a0),oldcopper
- move.l #newcopper,(a0)
- move.w #$8080,$dff096
- move.w #$8020,$dff09a
- move.l $6c.w,old+2
- move.l #new,$6c.w
-
- jsr aga
-
- move.l #adec,a0
- jsr ASCIITOFFP
- move.l d0,a
-
- move.l #bdec,a0
- jsr ASCIITOFFP
- move.l d0,b
- move.l d0,bstore
-
- move.l #aupperdec,a0
- jsr ASCIITOFFP
- move.l d0,aupper
-
- move.l #bupperdec,a0
- jsr ASCIITOFFP
- move.l d0,bupper
-
- move.l #pinitdec,a0
- jsr ASCIITOFFP
- move.l d0,pstore
-
- move.l #qinitdec,a0
- jsr ASCIITOFFP
- move.l d0,qstore
-
- ;Find out step (stepa) using horizontal placement of mandelbrot compared to
- ;size of screen
-
- move.l a,d1
- move.l aupper,d0
- CALLFFP SPSub
- move.l d0,d6
- move.l #HorizScreen,a0
- jsr ASCIITOFFP
- move.l d0,d1
- move.l d6,d0
- CALLFFP SPDiv
- move.l d0,stepa
-
- ;Find out step (stepb) using vertical placement of mandelbrot compared to
- ;size of screen
-
- move.l b,d1
- move.l bupper,d0
- CALLFFP SPSub
- move.l d0,d6
- move.l #VertScreen,a0
- jsr ASCIITOFFP
- move.l d0,d1
- move.l d6,d0
- CALLFFP SPDiv
- move.l d0,stepb
-
- ;Find out horizontal pixel multiplication factor
-
- move.l One,d0
- move.l stepa,d1
- CALLFFP SPDiv
- move.l d0,HorizMult
-
- ;Find out vertical pixel multiplication factor
-
- move.l One,d0
- move.l stepb,d1
- CALLFFP SPDiv
- move.l d0,VertMult
-
-
- *** MAIN PROGRAM ***
- lea Mult80,a2
- move.l #Screen,a5
- wait:
-
-
- move.l a,d5
- move.l b,a3
-
- ResVals move.l pstore,d7 ;d7=p
- move.l qstore,d6 ;d6=q
- move.w #0,iteration
-
- IterLoop move.l d7,d0
- move.l d0,d1
- CALLFFP SPMul
- move.l d0,d2
-
- move.l d6,d0
- move.l d0,d1
- CALLFFP SPMul
- move.l d2,d1
- move.l d0,d3
-
- CALLFFP SPAdd
-
- move.l #$80000043,d1 ;4
- CALLFFP SPCmp
- bge.b OutIter
-
- cmp.w #32,iteration
- bge.b OutIter
-
- ;PNEW=P*P-Q*Q+A (P*P and Q*Q have previously been calculated and placed in
- ; d2 and d3)
-
- move.l d3,d1
- move.l d2,d0
-
- CALLFFP SPSub
-
- move.l d5,d1
-
- CALLFFP SPAdd
-
- move.l d0,d3
-
- ;QNEW = 2*P*Q+B Tricky one this on ehh chappy
-
- move.l #$80000042,d0 ;2
- move.l d7,d1
-
- CALLFFP SPMul
-
- move.l d6,d1
-
- CALLFFP SPMul
-
- move.l a3,d1
-
- CALLFFP SPAdd
-
- move.l d0,d6
- move.l d3,d7
-
- add.w #1,iteration
- bra.w IterLoop
-
- OutIter move.w iteration,d0
- move.w d0,colour
-
- move.l HorizMult,d0
- move.l d5,d1
- CALLFFP SPMul
- CALLFFP SPFix
- add.l #160,d0
- move.l d0,d3
-
- move.l VertMult,d0
- move.l a3,d1
- CALLFFP SPMul
- CALLFFP SPFix
- move.l #100,d1
- sub.l d0,d1
- move.l d3,d0
-
- Plot
- ; moveq #0,d3
- move.w colour,d3
- moveq.l #0,d4
- move.l a5,a4
-
- CalcPixel: add.w d1,d1
- move.w (a2,d1),d1
- move.w d0,d2
- lsr.w #3,d2
- add.w d2,d1
- not.b d0
- move.l #4,d2
- LOOP256
- btst d4,d3
- bne.s DPP
- bset d0,(a4,d1.w)
- DPP addq.b #1,d4
- add.l #SizeOfPlane,a4
- dbra d2,LOOP256
-
- btst #$6,$bfe001.l
- beq.b Exit
-
- move.l a3,d0
- move.l stepb,d1
- CALLFFP SPAdd
- move.l d0,a3
- move.l bupper,d1
- CALLFFP SPCmp
- blt.w ResVals
-
- move.l bstore,a3
-
- move.l d5,d0
- move.l stepa,d1
- CALLFFP SPAdd
- move.l d0,d5
- move.l aupper,d1
- CALLFFP SPCmp
- blt.w ResVals
-
- Nomore btst #6,$bfe001.l
- bne.s Nomore
-
- *** EXIT PROGRAM ***
- Exit
- move.l old+2,$6c.w
- move.l _GfxBase,a0
- add.l #$32,a0
- move.w #$0080,$dff096
- move.l oldcopper,(a0)
- move.w #$8020,$dff096
- move.w #$8080,$dff096
-
- error: CALLEXEC Permit
-
- ; moveq #0,d0
- ; move.l #FFPNAME,a1
- ; CALLEXEC CloseLibrary
-
- ; moveq #0,d0
- ; move.l #gfxlib,a1
- ; CALLEXEC CloseLibrary
-
- moveq #0,d0
- rts
-
- *** LEVEL 3 INTERRUPT ***
-
- new: movem.l d0-d7/a0-a6,-(sp)
- btst #4,($dff000+intreqr+1).l
- beq.b out
- lea (CUSTOM).l,a6
- out: movem.l (sp)+,d0-d7/a0-a6
- old: jmp 0.l
- fred dc.w 0
-
- AGA: lea CopCol,a0
- move.w #$2009,d0
- move.l #15,d5
- move.l #$306,d1
- move.l #$000,d3
- move.l #$503,d4
- move.l #$000,d6
- OuterLoop: move.w #$f,d2
- InnerLoop move.w d0,(a0)+
- add.w #$0100,d0
- move.w #$fffe,(a0)+
- move.w #$0106,(a0)+
- move.w #$0000,(a0)+
- move.w #$180,(a0)+
- move.w d1,(a0)+
- move.w #$0106,(a0)+
- move.w #$0200,(a0)+
- move.w #$180,(a0)+
- move.w d3,(a0)+
- move.w #$0106,(a0)+
- move.w #$0000,(a0)+
- move.w #$182,(a0)+
- move.w d4,(a0)+
- move.w #$0106,(a0)+
- move.w #$0200,(a0)+
- move.w #$182,(a0)+
- move.w d6,(a0)+
- add.w #$0010,d3
- add.w #$001,d6
- dbra d2,InnerLoop
- add.w #$0010,d1
- add.w #$001,d4
- dbra d5,OuterLoop
- rts
-
- ASCIITOFFP
- LeadingSpace
- cmpi.b #" ",(a0)
- bne.s CheckNeg
- add.l #1,a0
- bra.s LeadingSpace
- CheckNeg
- move.l #0,Negative
- cmpi.b #"-",(a0)
- bne.s PositivePart
- move.l #128,Negative
- adda.l #1,a0
- PositivePart
- move.l #0,Ritodp
- move.l #0,Leftodp
- move.l #0,RdpDigits
- move.l #0,LdpDigits
- move.l #0,FloatNum
- moveq.l #0,d4
- bsr.w DoPart
- tst.l d1
- bne.w ConvertError
- move.l d0,Leftodp
- move.l d2,LdpDigits
- cmp.b #".",(a0)
- bne.w LeftOnly
- adda.l #1,a0
- move.l #1,d4
- bsr.w DoPart
- tst.l d1
- bne.w ConvertError
- move.l d0,Ritodp
- move.l d2,RdpDigits
- FiniLeft
- move.l LdpDigits,d7
- subq.l #7,d7
- ble.s FiniRight
- move.l Leftodp,d0
- beq.s FiniRight
- move.l TEN,d2
- Loop
- CALLFFP SPMul
- subq.l #1,d7
- bne.s Loop
- move.l d0,Leftodp
- FiniRight
- move.l RdpDigits,d7
- beq.s FinishConv
- move.l Ritodp,d0
- beq.s FinishConv
- move.l TEN,d1
- Loop2
- CALLFFP SPDiv
- subq.l #1,d7
- bne.s Loop2
- move.l d0,Ritodp
- FinishConv
- move.l Ritodp,d0
- move.l Leftodp,d1
- CALLFFP SPAdd
- LeftOnly
- moveq #0,d1
- move.l Negative,d3
- eor.l d3,d0
- move.l d0,FloatNum
- ConvertError
- rts
- DoPart
- move.l #0,Integer
- moveq #0,d0
- moveq #0,d1
- moveq #0,d2
- moveq #0,d3
- moveq #0,d5
- LeadingZero
- move.b (a0)+,d3
- cmpi.b #"0",d3
- bne.s FirstDiga
- tst.l d4
- beq.s LeadingZero
- addq.l #1,d5
- bra.s LeadingZero
- FirstDig
- move.b (a0)+,d3
- FirstDiga
- cmpi.b #"9",d3
- bhi.s NoMoreDigits
- cmpi.b #"0",d3
- blt.s NoMoreDigits
- andi.l #$0f,d3
- lsl.l #1,d0
- move.l d0,d1
- lsl.l #2,d0
- add.l d1,d0
- add.l d3,d0
- addq.l #1,d2
- cmpi.l #7,d2
- bne.s FirstDig
- MoreDigits
- move.b (a0)+,d3
- cmpi.b #"9",d3
- bhi.s NoMoreDigits
- cmpi.b #"0",d3
- blt.s NoMoreDigits
- tst.l d4
- bne.s MoreDigits
- addq.l #1,d2
- cmpi.l #18,d2
- bne.s MoreDigits
- TooMany
- moveq #1,d1
- bra.b AErrorExit
- NoMoreDigits
- add.l d5,d2
- suba.l #1,a0
- move.l d0,integer
- tst.l d0
- beq.b PartDone
- move.l #97,d1
- Loop3
- subq.l #1,d1
- asl.l #1,d0
- bcc.s Loop3
- roxr.l #1,d0
- andi.l #$ffffff00,d0
- eor.l d1,d0
- PartDone
- moveq #0,d1
- AErrorExit
- rts
-
-
-
- *** Vars ***
-
- gfxlib dc.b "graphics.library",0
- EVEN
- _GfxBase dc.l 0
- oldcopper dc.l 0
-
- colour dc.b 4
- EVEN
- Mult80:
- X set 0
- rept 256
- dc.w 40*X
- X set X+1
- endr
-
- a dc.l 0
- bstore dc.l 0
- b dc.l 0
- aupper dc.l 0
- bupper dc.l 0
- p dc.l 0
- q dc.l 0
- pstore dc.l 0
- qstore dc.l 0
- stepa dc.l 0
- stepb dc.l 0
- qnew dc.l 0
- pnew dc.l 0
- horizmult dc.l 0
- vertmult dc.l 0
- One dc.l $80000041
- iteration dc.w 0
- adec dc.b "-2.0",0
- EVEN
- bdec dc.b "-2",0
- EVEN
- aupperdec dc.b "2",0
- EVEN
- bupperdec dc.b "2",0
- EVEN
- pdec dc.l 0,0
- EVEN
- qdec dc.l 0,0
- EVEN
- stepadec dc.b "0.02",0
- EVEN
- stepbdec dc.b "0.02",0
- EVEN
- pinitdec dc.b "0",0
- EVEN
- qinitdec dc.b "0",0
- EVEN
- horizscreen dc.b "200",0
- EVEN
- vertscreen dc.b "200",0
- EVEN
-
-
-
- FFPNAME dc.b 'mathffp.library',0
- EVEN
- _MathBase dc.l 0
- Leftodp dc.l 0
- LdpDigits dc.l 0
- Ritodp dc.l 0
- RdpDigits dc.l 0
- FloatNum dc.l 0
- integer dc.l 0
- TEN dc.l $a0000044
- Negative dc.l 0
-
- SECTION DemoTemplatedata,data_c
-
-
- newcopper: dc.w intreq,$8010
- dc.w $0501,$ff00
- dc.w $8e,$2c81
- dc.w $90,$32c1
- dc.w $92,$38
- dc.w $94,$d0
- dc.w $102,$0 ;Screen Offset
- dc.w $108,0 ;Even Modulo
- dc.w $10a,0 ;Odd Modulo
- dc.w $180,0
-
- dc.w $e0
- Plane1Hi dc.w 0,$e2
- Plane1Lo dc.w 0,$e4
- Plane2Hi dc.w 0,$e6
- Plane2Lo dc.w 0,$e8
- Plane3Hi dc.w 0,$ea
- Plane3Lo dc.w 0,$ec
- Plane4Hi dc.w 0,$ee
- Plane4Lo dc.w 0,$f0
- Plane5Hi dc.w 0,$f2
- Plane5Lo dc.w 0,$f4
- Plane6Hi dc.w 0,$f6
- Plane6Lo dc.w 0,$f8
- Plane7Hi dc.w 0,$fa
- Plane7Lo dc.w 0,$fc
- Plane8Hi dc.w 0,$fe
- Plane8Lo dc.w 0
- dc.w $106,$000,$180,$000,$106,$200,$180,$000
- dc.w $106,$000,$182,$0f0,$106,$200,$182,$080
- dc.w $106,$000,$184,$0f0,$106,$200,$184,$0f0
- dc.w $106,$000,$186,$0e0,$106,$200,$186,$080
- dc.w $106,$000,$188,$0e0,$106,$200,$188,$0f0
- dc.w $106,$000,$18a,$0d0,$106,$200,$18a,$080
- dc.w $106,$000,$18c,$0d0,$106,$200,$18c,$0f0
- dc.w $106,$000,$18e,$0c0,$106,$200,$18e,$080
- dc.w $106,$000,$190,$0c0,$106,$200,$190,$0f0
- dc.w $106,$000,$192,$0b0,$106,$200,$192,$080
- dc.w $106,$000,$194,$0b0,$106,$200,$194,$0f0
- dc.w $106,$000,$196,$0a0,$106,$200,$196,$080
- dc.w $106,$000,$198,$0a0,$106,$200,$198,$0f0
- dc.w $106,$000,$19a,$090,$106,$200,$19a,$080
- dc.w $106,$000,$19c,$090,$106,$200,$19c,$0f0
- dc.w $106,$000,$19e,$080,$106,$200,$19e,$080
- dc.w $106,$000,$1a0,$080,$106,$200,$1a0,$0f0
- dc.w $106,$000,$1a2,$070,$106,$200,$1a2,$080
- dc.w $106,$000,$1a4,$070,$106,$200,$1a4,$0f0
- dc.w $106,$000,$1a6,$060,$106,$200,$1a6,$080
- dc.w $106,$000,$1a8,$060,$106,$200,$1a8,$0f0
- dc.w $106,$000,$1aa,$050,$106,$200,$1aa,$080
- dc.w $106,$000,$1ac,$050,$106,$200,$1ac,$0f0
- dc.w $106,$000,$1ae,$040,$106,$200,$1ae,$080
- dc.w $106,$000,$1b0,$040,$106,$200,$1b0,$0f0
- dc.w $106,$000,$1b2,$030,$106,$200,$1b2,$080
- dc.w $106,$000,$1b4,$030,$106,$200,$1b4,$0f0
- dc.w $106,$000,$1b6,$020,$106,$200,$1b6,$080
- dc.w $106,$000,$1b8,$020,$106,$200,$1b8,$0f0
- dc.w $106,$000,$1ba,$010,$106,$200,$1ba,$080
- dc.w $106,$000,$1bc,$010,$106,$200,$1bc,$0f0
- dc.w $106,$000,$1be,$000,$106,$200,$1be,$080
-
- dc.w $2209,$fffe
- dc.w $100,$5200
- CopCol dcb.w 256*18,0
-
- dc.w $f809,$fffe
- dc.w $100,$0200
- dc.w $ffff,$fffe
- EVEN
- screen dcb.b SizeOfPlane*Planes,0
- EVEN
-
-